1 一些概念
- 工作副本(Working Copy):你的代码相关的一切,你自己弄得文件和目录。
- 暂存区(Stage,Index): 对工作副本需要提交的信息的一个跟踪,存储在工作副本目录下.git/index的文件里面,记录通过git add 结果的文件信息。
- 本地仓库(Repository): 本地的代码版本库,为git commit的目标区。
- 远程仓库(Remote Repository): 远程的代码版本库,为git push 的目标区
HEAD: 记录当前工作副本,最后一次提交的版本。
origin: 默认的远程库主机名,与hosts类似。
master: 默认的名称为master的分支(或者可以叫主分支,trunk)。
1—-git add—->2—-git commit—->3————–git push————>4
1————-git commit -a———>3
1<————git checkout———–3<——–git fetch/clone———–4
1<————————–git pull————————————-4
2 配置SSH Key认证,配置多个账户
2.1 配置 SSH-Key 认证
- 生成ssh key
Tips: 存储的路径是绝对路径,在非bash环境下,windows中的路径需要改一改,phrase有没有都没有关系ssh-keygen -t rsa "youemail"
- 配置多个账户
如果你需要向不同的git中提交内容,可能还使用不同的ssh认证,比如说公司git和个人git
你需要为不同的主机配置多个不同的ssh key认证,步骤如下:- 切换到~/.ssh
windows下的路径为 c:\username.ssh
Linux路径为/home/username/.ssh/ - 编辑配置文件 config
输入以下内容:Host host1 HostName host1.test.com User test1 IdentityFile ~/.ssh/test1_id_rsa Host host2 HostName host2.test.com User test2 IdentityFile ~/.ssh/test2_id_rsa
- 切换到~/.ssh
Tips:以上写法在git bash环境下可以支持,否则,ssh查找key的路径为 /home/username/.ssh这样在windows 环境下是无效的。
3 问题解决
3.1 Permission Denied(publickey)
在cmd,powershell,xshell中执行git 操作会有这样的权限不足的提示
原因是,在没有bash环境的命令行下, 执行git会找/home/username/.ssh/
而这个路径在windows下是不存在的,而且也不会做C:\uername.ssh\到 /c/username/.ssh/的转换
所以根本就找不到ssh key,自然无法认证,导致认证失败
- 解决办法:windows 下给git增加 bash环境
在windows中安装git中,会选择git的环境的PATH,在命令行使用git,三个选项:- Use Git from Git Bash only
- Use Git from the Windows Commond Prompt
- Use Git and opotional Unix tools from the Windows Command Prompt
在第一个选项中,只有在git bash中使用git的时候,才会正确找到~/.ssh的路径,会做c:\username.ssh\ 到/c/username/.ssh/的转换,所以即使你把所有的git bin目录加入到PATH中,在非git bash的命令行下,同样也会得到Permission Denied(publickey)的结果
在第二个选项中,在git bash 和 windows 命令行中对git相关的命令做相应的转换,这样在Windows命令行和Git bash下都能正确的进行ssh key 认证。
第三个选项,会将所有git安装的所有的命令都做相应的转换。包括ssh等命令。
- 测试方法
使用ssh 命令测试对github的连接,分别git bash和windows命令行中测试如下命令,在调试信息中可以看到输出结果。ssh -v github.com ssh -vv github.com
3.2 git 每次输入都需要输入用户名和密码
存储用户名和密码
在使用HTTPS协议的情况下,是需要输入用户名和密码的,可以存储在配置文件中,或存储在URL中,不过这样的安全性会降低使用SSH协议的URL
git支持多种协议的,选择ssh连接的url,替换本地工作副本下的文件中的https协议的url
路径为WorkingCopy/.git/config
这样就可以使用ssh认证,而不需要每次都输入用户名密码,甚至连密码都不需要输入(如果你的ssh key没有设置密码的话)
4 参考资料
- Git教程和基本原理
- Git Book中文
- Git Book English
- Git Reference
- 图解Git中文版
- 手把手教你使用git
- Git常用命令
- Git常用命令整理
- Git Community Book中文
- Git Manual
- Git简明指南
- Git简易指南
- Git远程操作详解
- 看日记学Git
- 易百Git教程
- Git工作区,暂存区和版本库
- Git工作区和暂存区讲解
- Git SSH key本地多个SSH key
- Git多账号登陆
- 多个git账户生成多份rsa秘钥实现多个账户同时使用配置
- Git ssh多账户管理
- git初体验(七)多账户的使用
- Git Push 避免用户名和密码的方法
最后更新: 2022年03月02日 03:32
原始链接: http://rawbin-.github.io/dev-tools/git/2015-03-18-using-git/